// function bubbleSort(arr = []) {
//   const len = arr.length; //4
//   // 外部从索引1开始

//   for (let i = 1; i <= len - 1; i++) {
//     // i=3
//     // 从第一个元素开始，比较相邻的两个元素，前者大就交换位置
//     // len-i=1
//     for (let j = 0; j <= len - i; j++) {
//       // 这样确保最后一位元素的大小q
//       if (arr[j] > arr[j + 1]) {
//         //1>0
//         let temp = arr[j]; //1
//         arr[j] = arr[j + 1]; //0
//         arr[j + 1] = temp; //1 [0,1,4,9]
//       }
//     }
//   }
//   return arr;
// }

// let c = bubbleSort([9, 4, 1, 0]);
// console.log(c);

// 外部循环结束条件 小于等于length-1次，外部的递增 值++i,有限判断结束条件
// 内部循环结束条件 小于等于length-i，递增值为++j,这样确保最后一位元素的大小q
// 1-[0,1,2,3] 最后一位确定了有序
// 2-[0,1,2]
// 3-[0,1] 结束条件是，调换位置后跟有序的第一个比较，小于则停止循环



function bubbleSort(arr) {
  let len = arr.length
  for (let i = 0; i < len - 1; i++) {
    // 从第一个元素开始，比较相邻的两个元素，前者大就交换位置
    for (let j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        let num = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = num
      }
    }
    // 每次遍历结束，都能找到一个最大值，放在数组最后
  }
  return arr
}
 
//测试
console.log(bubbleSort([2, 3, 1,  4])) // [ 1, 2, 3, 4, 5 ]
